import { apiService } from "@service/index";

// 使用 apiService 创建文章相关的 API 端点
const articleEndpoints = apiService
  .enhanceEndpoints({ addTagTypes: ["article"] }) // 增强端点，添加标签类型"article"
  .injectEndpoints({
    endpoints: (build) => ({
      // 获取文章详情
      requestArticle: build.query<ArticleResponse, string>({
        query: (id) => ({ url: `/articles/${id}` }), // 根据文章ID构造请求URL
        providesTags: ["article"], // 指定操作提供的标签，用于缓存更新
      }),
      // 收藏文章
      collectArticle: build.mutation<GeekResponse<{ target: string }>, string>({
        query: (id) => ({
          url: "/article/collections", // 请求URL
          method: "POST", // 请求方法
          body: { target: id }, // 请求体，包含要收藏的文章ID
        }),
        invalidatesTags: ["article"], // 指定操作后失效的标签，用于缓存更新
      }),
      // 取消收藏文章
      unCollectArticle: build.mutation<null, string>({
        query: (id) => ({
          url: `/article/collections/${id}`, // 构造取消收藏的请求URL
          method: "DELETE", // 请求方法
        }),
        invalidatesTags: ["article"], // 指定操作后失效的标签，用于缓存更新
      }),
      // 点赞文章
      likeArticle: build.mutation<GeekResponse<{ target: string }>, string>({
        query: (id) => ({
          url: "/article/likings", // 请求URL
          method: "POST", // 请求方法
          body: { target: id }, // 请求体，包含要点赞的文章ID
        }),
        invalidatesTags: ["article"], // 指定操作后失效的标签，用于缓存更新
      }),
      // 取消点赞文章
      unLikeArticle: build.mutation<null, string>({
        query: (id) => ({ url: `/article/likings/${id}`, method: "DELETE" }), // 构造取消点赞的请求URL
        invalidatesTags: ["article"], // 指定操作后失效的标签，用于缓存更新
      }),
    }),
  });

// 导出使用这些端点的 Hooks
export const {
  useRequestArticleQuery, // 使用获取文章详情的 Hook
  useCollectArticleMutation, // 使用收藏文章的 Hook
  useUnCollectArticleMutation, // 使用取消收藏文章的 Hook
  useLikeArticleMutation, // 使用点赞文章的 Hook
  useUnLikeArticleMutation, // 使用取消点赞文章的 Hook
} = articleEndpoints;
